#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<stdlib.h>
#include<string>
// using std::cout;
// using std::endl;
using namespace std;
// char ch[1024];
class Requse
{
public:
    Requse(int start,int end,const string&s)
    :_start(start),_end(end),_thread_name(s)
    {}
    int getStart()
    {
        return _start;
    }
    int getEnd()
    {
        return _end;
    }
    string&getThreadName()
    {
        return _thread_name;
    }
private:
    int _start;
    int _end;
    string _thread_name;
};
class Result
{
public:
    Result()
    :_result(0),_exitcode(0)
    {
    }
    int getResult()
    {
        return _result;
    }
    void setResult(int val)
    {
        _result = val;
    }
private:
    int _result;
    int _exitcode;
};
void * handler(void*arg)
{
    // int cnt = 5;
    // while(true)
    // {
    //     cout<<"process pid:"<<getpid()<<endl;
    //     // sleep(1);
    //     // cout<<"please write:";
    //     // fgets(ch,sizeof(ch),stdin);
    //     cnt--;
    //     if(cnt == 0)
    //     {
    //         return (void*)1;
    //     }
    //     sleep(1);
    // }
    //计算和；
    Requse*req = (Requse*)arg;
    Result*ret = new Result;
    int sum = ret->getResult();
    for(int i=req->getStart();i<=req->getEnd();i++)
    {
        sum += i;
    }
    ret->setResult(sum);
    return (void*)ret;
}
int main()
{
    pthread_t thread;
    // int n = pthread_create(&thread,nullptr,handler,nullptr);
    // if(n!=0)
    // {
    //     cout<<"creat pthread faill"<<endl;
    //     exit(1);
    // }
    Requse req(0,100,"thread");
    int n = pthread_create(&thread,nullptr,handler,&req);
    // while(true)
    // {
    //     // cout<<"process pid:"<<getpid()<<" new thread id:"<<thread<<endl;
    //     // printf("%s",ch);
    //     // cout<<endl;
    //     sleep(1);
    // }
    // void*retval;
    // pthread_join(thread,&retval);
    // cout<<"thread quit val:"<<(long long )retval;//void*类型在64位下是8字节，int是4字节，会发生高位截断；
    // return 0;
    void*retval;
    pthread_join(thread,&retval);
    Result*ret = (Result*)retval;
    char ch[100];
    snprintf(ch,sizeof(ch),"%d:%s",ret->getResult(),req.getThreadName().c_str());   
    printf("%s\n",ch);

}